package com.ruoyi.weiriya.domain;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseIdEntity;
import com.ruoyi.common.utils.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.util.Date;

/**
 * 用户支付订单对象 w_order
 * 
 * @author lynn
 * @date 2023-08-01
 */
@Data
@ApiModel(value = "WOrder", description = "用户支付订单对象")
public class WOrder extends BaseIdEntity
{
    private static final long serialVersionUID = 1L;

    /** ID */
    @ApiModelProperty("ID")
    private String id;

    /** 区域ID */
    @ApiModelProperty("区域ID")
    private String areaId;

    @Excel(name = "区域名称")
    @TableField(exist = false)
    @ApiModelProperty("区域名称")
    private String areaName;

    /** 订单编号 */
    @Excel(name = "订单编号")
    @ApiModelProperty("订单编号")
    private String sn;

    /** 订单类型 */
    @TableField(exist = false)
    @ApiModelProperty("订单类型")
    private String orderType;

    /** 商品类型 */
    @Excel(name = "商品类型", readConverterExp = "MONTH_DEPOSIT=停车月卡,QUARTER_DEPOSIT=停车季卡,YEAR_DEPOSIT=停车年卡,MONTH_CHARGE=停车/充电月卡,QUARTER_CHARGE=停车/充电季卡,YEAR_CHARGE=停车/充电年卡")
    @ApiModelProperty("商品类型")
    private String goodsType;

    /** 商品价格 */
    @Excel(name = "商品价格")
    @ApiModelProperty("商品价格")
    private Double goodsPrice;

    /** 最终价格 */
    @Excel(name = "最终价格")
    @ApiModelProperty("最终价格")
    private Double finalPrice;

    /** 修改价格的管理员ID */
    @ApiModelProperty("修改价格的管理员ID")
    private String changePriceUserId;

    /** 会员ID */
    @Excel(name = "会员ID")
    @ApiModelProperty("会员ID")
    private String memberId;

    @Excel(name = "会员名称")
    @TableField(exist = false)
    @ApiModelProperty("会员名称")
    private String memberName;

    /** 用户类型 */
    @Excel(name = "用户类型", readConverterExp = "1=会员用户,2=临时用户")
    @ApiModelProperty("用户类型(1会员用户，2临时用户)")
    private Integer memberType;

    /** 订单状态 */
    @Excel(name = "订单状态", readConverterExp = "PAID=已支付,UNPAID=未支付,CANCEL=已取消")
    @ApiModelProperty("订单状态")
    private String orderStatus;

    /** 订单取消原因 */
    @Excel(name = "订单取消原因")
    @ApiModelProperty("订单取消原因")
    private String cancelReason;

    /** 支付方式（1小程序支付，2后台支付） */
    @ApiModelProperty("支付方式（1小程序支付，2后台支付）")
    private Integer payType;

    /** 支付方式返回的交易号 */
    @Excel(name = "支付方式返回的交易号")
    @ApiModelProperty("支付方式返回的交易号")
    private String payOrderNo;

    /** 支付时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "支付时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("支付时间")
    private Date paymentTime;

    /** 完成时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @Excel(name = "完成时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
    @ApiModelProperty("完成时间")
    private Date completeTime;

    /** 创建者 */
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty("创建者")
    private String createBy;

    /** 创建时间 */
    @ApiModelProperty("创建时间")
    @TableField(fill = FieldFill.INSERT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    /** 更新者 */
    @TableField(fill = FieldFill.UPDATE)
    @ApiModelProperty("更新者")
    private String updateBy;

    /** 更新时间 */
    @ApiModelProperty("更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;


    public <T> QueryWrapper<T> queryWrapper(){
        QueryWrapper<T> wrapper=new QueryWrapper<>();

        wrapper.eq(StringUtils.isNotEmpty(id),"o.id" , id);
        wrapper.eq(StringUtils.isNotEmpty(areaId),"o.area_id" , areaId);
        wrapper.like(StringUtils.isNotEmpty(sn),"o.sn" , sn);
        wrapper.like(StringUtils.isNotEmpty(goodsType),"o.goods_type" , goodsType);
        wrapper.eq(goodsPrice != null,"o.goods_price" , goodsPrice);
        wrapper.eq(StringUtils.isNotEmpty(memberId),"o.member_id" , memberId);
        wrapper.eq(memberType != null,"o.member_type" , memberType);
        wrapper.like(StringUtils.isNotEmpty(orderStatus),"o.order_status" , orderStatus);
        wrapper.like(StringUtils.isNotEmpty(cancelReason),"o.cancel_reason" , cancelReason);
        wrapper.like(StringUtils.isNotEmpty(payOrderNo),"o.pay_order_no" , payOrderNo);
        wrapper.like(StringUtils.isNotEmpty(createBy),"o.create_by" , createBy);
        wrapper.like(StringUtils.isNotEmpty(updateBy),"o.update_by" , updateBy);
        wrapper.and(StringUtils.isNotEmpty(memberName),v -> {
            v.like("m.user_name", memberName);
            v.or().like("m.nick_name", memberName);
            v.or().like("m.real_name", memberName);
        });
        wrapper.orderByDesc("o.create_time");
        return wrapper;
    }

}
